/*=========================================================================

  Program:   Visualization Toolkit
  Module:    TestCutter.cxx

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
#include "vtkIdListCollection.h"
#include "vtkNew.h"
#include "vtkPoints.h"
#include "vtkPolygonBuilder.h"
#include "vtkSmartPointer.h"

int TestPolygonBuilder5(int, char* [])
{
  // this case comes from a real-world example (see https://gitlab.kitware.com/vtk/vtk/issues/17170 )
#define NTRIANGLES 7

  vtkIdType tris[NTRIANGLES][3] =
  { {0,1,2},{3,4,7},{7,4,5},{4,6,5},{3,7,4},{4,7,6},{7,5,6} };

  vtkPolygonBuilder builder;
  vtkIdType p[3];
  for(int i = 0; i < NTRIANGLES; ++i)
  {
    for(int j = 0; j < 3; ++j)
    {
      p[j] = tris[i][j];
    }

    builder.InsertTriangle(p);
  }

  vtkNew<vtkIdListCollection> polys;
  builder.GetPolygons(polys.GetPointer()); // will result in out-of-memory crash

  if (polys->GetNumberOfItems() < 1)
  {
    return EXIT_FAILURE;
  }

  // clean up after ourselves.
  for(int i = 0; i< polys->GetNumberOfItems(); ++i)
  {
    polys->GetItem(i)->Delete();
  }

  polys->RemoveAllItems();

  return EXIT_SUCCESS;
}
